/**
 * http全局配置，以及请求，响应拦截器定义(此vm参数为vue实例)
 */
import env from '@/config'
const Http = uni.$u.http
import i18n from '@/locale'

// 默认成功状态码
const successCode = 200

let isShow = false

module.exports = vm => {
  // 初始化请求配置
  Http.setConfig(config => {
    /* config 为默认全局配置*/
    config.baseURL = env.baseUrl
    // 默认自定义参数
    config.custom = {
      // 是否有加载框
      loading: false,
      // 是否有提示框
      toast: true,
      // 是否需要catch返回
      catch: true
    }
    return config
  })

  // 请求拦截
  Http.interceptors.request.use(
    config => {
      // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
      config.data = config.data || {}
      // header设置
      if(vm.$store.getters.token) {
        config.header.authorization = `${vm.$store.getters.token}`
        config.header.satoken = `${vm.$store.getters.token}`
      }
	  
      config.header.lang = `${vm.$store.getters.lang}`
      config.header.language = `${vm.$store.getters.lang}`
      config.header['Content-Type'] = 'application/json'
      // config.header['Content-Type'] = 'application/x-www-form-urlencoded'
	   
	  // 判断url改变响应数据格式
	  
	  if (config.url === '/api/user/easyGenerateCode') {
	  		  config.responseType = 'blob'
	  }
      // 是否加载loading
      if (config?.custom?.loading) vm.$modal.loading()
      return config
    },
    config => {
      return Promise.reject(config)
    }
  )
  // 响应拦截
  Http.interceptors.response.use(
    response => {

      // 未设置状态码则默认成功状态
      const code = response.data.code || successCode
      // 获取错误信息
      const msg = response.data?.msg || i18n.t('public.t11')
      // 自定义参数
      const custom = response.config?.custom
      // 是否关闭loading
      if (custom?.loading) vm.$modal.hideLoading()

      if (code !== successCode) {
        // 是否显示toast框
        if (custom?.toast) vm.$modal.toast(msg)
        if (code === 401) {
          vm.$modal.hideLoading()
          vm.$store.dispatch('LogOut')
          uni.reLaunch({
            url: '/pages/login/login'
          })
        }
		
        return Promise.reject(response.data)
      }
      return response.data || {}
    },
    response => {
		
      // 获取错误信息
      const msg = response.errMsg

      // 自定义参数
      const custom = response.config?.custom
      // 是否关闭loading
      if (custom?.loading) vm.$modal.hideLoading()
      // 是否显示toast框
      if (custom?.toast) vm.$modal.toast(msg)
      // 是否需要catch返回，则进行reject
      if (custom?.catch) {
			  return Promise.reject(response.data)
      } else {
			  // 否则返回一个pending中的promise，请求不会进入catch中
			  return new Promise(() => {})
      }
    }
  )
}
